package br.com.leopard.erp.gym.dao.cad;

import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

import br.com.leopard.erp.gym.exception.NenhumResultadoEncontradoException;
import br.com.leopard.erp.gym.mapeamento.cad.Estado;
import br.com.leopard.erp.gym.mapeamento.cad.Municipio;
import br.com.leopard.erp.gym.persistence.AbstractDAO;
import br.com.leopard.erp.gym.persistence.ParametroQueryBuilder;

@Stateless
@LocalBean
public class MunicipioDAO extends AbstractDAO<Municipio, Long> {

	public MunicipioDAO() {
		super(Municipio.class);
	}

	public List<Municipio> getPorNomeMunicipio(String municipio) {
		String query = "Municipio.findByMunicipio";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("municipio", municipio);

		return super.listNamedQuery(query, builder.getParametros());
	}

	public List<Municipio> getPorNomeMunicipioEEstado(String municipio, Estado estado) {
		String query = "Municipio.findByMunicipioEEstado";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("municipio", municipio);
		builder.addParametro("estado", estado);

		return super.listNamedQuery(query, builder.getParametros());
	}

	public List<Municipio> getPorNomeMunicipioEEstadoEIDMunicipio(String municipio, Estado estado, Long idMunicipio) {
		String query = "Municipio.findByMunicipioEIDMunicipioEEstado";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("municipio", municipio);
		builder.addParametro("estado", estado);
		builder.addParametro("idMunicipio", idMunicipio);

		return super.listNamedQuery(query, builder.getParametros());
	}

	public List<Municipio> getPorNomeMunicipioEIDMunicipio(String municipio, Long idMunicipio) {
		String query = "Municipio.findByMunicipioEIDMunicipio";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("municipio", municipio);
		builder.addParametro("idMunipio", idMunicipio);

		return super.listNamedQuery(query, builder.getParametros());
	}

	public List<Municipio> getPorEstado(Estado estado) {
		String query = "Municipio.findByEstado";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("estado", estado);

		return super.listNamedQuery(query, builder.getParametros());
	}

	public Municipio getByCodigoIBGE(Long codigoIBGE) throws NenhumResultadoEncontradoException {
		String query = "Municipio.findByCodigoIBGE";

		ParametroQueryBuilder builder = new ParametroQueryBuilder();
		builder.addParametro("codigoIBGE", codigoIBGE);

		return super.getSingleObject(query, builder.getParametros());
	}
}
